package com.cicadamob.contact.api.Utils.Logger;

import android.content.Context;

import com.cicadamob.contact.api.Utils.AppUtils;
import com.cicadamob.contact.api.Utils.ContactConfig;
import com.cicadamob.contact.api.service.WriteLogIntentService;

/**Wrapper API for sending log output.
 * user: chenzhi
 * 14-9-10
 *
 */
public class AppLogger {
    protected static final String TAG = "kakaonew";
    private static boolean DEBUG=true;
    private AppLogger() {
    }

    /**
     * Send a VERBOSE log message.
     *
     * @param msg The message you would like logged.
     */
    public static void v(String msg) {
        if (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.v(TAG, buildMessage(msg));
    }

    /**Send a VERBOSE log message.
     * @param TAG TAG
     * @param msg The message you would like logged.
     */
public static void v(String TAG ,String msg){
    if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
        android.util.Log.v(TAG, buildMessage(msg));
}
    /**
     * Send a VERBOSE log message and log the exception.
     *
     * @param msg The message you would like logged.
     * @param thr An exception to log
     */
    public static void v(String msg, Throwable thr) {
        if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.v(TAG, buildMessage(msg), thr);
    }

    /**
     * Send a DEBUG log message.
     *
     * @param msg
     */
    public static void d(String msg) {
        if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.d(TAG, buildMessage(msg));
    }
    /**
     * Send a DEBUG log message.
     *@param TAG TAG
     * @param msg
     */
    public static void d(String TAG,String msg) {
        if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.d(TAG, buildMessage(msg));
    }

    /**
     * Send a DEBUG log message and log the exception.
     *
     * @param msg The message you would like logged.
     * @param thr An exception to log
     */
    public static void d(String msg, Throwable thr) {
        if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.d(TAG, buildMessage(msg), thr);
    }

    /**
     * Send an INFO log message.
     *
     * @param msg The message you would like logged.
     */
    public static void i(String msg) {
        if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.i(TAG, buildMessage(msg));
    }
    /**
     * Send an INFO log message.
     *@param TAG TAG
     * @param msg The message you would like logged.
     */
    public static void i(String TAG,String msg) {
        if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.i(TAG, buildMessage(msg));
    }

    /**
     * Send a INFO log message and log the exception.
     *
     * @param msg The message you would like logged.
     * @param thr An exception to log
     */
    public static void i(String msg, Throwable thr) {
        if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.i(TAG, buildMessage(msg), thr);
    }

    /**
     * Send an ERROR log message.
     *
     * @param msg The message you would like logged.
     */
    public static void e(String msg) {
        if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.e(TAG, buildMessage(msg));
    }
    /**
     * Send an ERROR log message.
     *@param TAG TAG
     * @param msg The message you would like logged.
     */
    public static void e(String TAG,String msg) {
        if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.e(TAG, buildMessage(msg));
    }

    /**
     * Send a WARN log message
     *
     * @param msg The message you would like logged.
     */
    public static void w(String msg) {
        if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.w(TAG, buildMessage(msg));
    }
    /**
     * Send a WARN log message
     * @param TAG TAG
     * @param msg The message you would like logged.
     */
    public static void w(String TAG,String msg) {
        if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.w(TAG, buildMessage(msg));
    }

    /**
     * Send a WARN log message and log the exception.
     *
     * @param msg The message you would like logged.
     * @param thr An exception to log
     */
    public static void w(String msg, Throwable thr) {
        if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.w(TAG, buildMessage(msg), thr);
    }

    /**
     * Send an empty WARN log message and log the exception.
     *
     * @param thr An exception to log
     */
    public static void w(Throwable thr) {
        if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.w(TAG, buildMessage(""), thr);
    }

    /**
     * Send an ERROR log message and log the exception.
     *
     * @param msg The message you would like logged.
     * @param thr An exception to log
     */
    public static void e(String msg, Throwable thr) {
        if  (DEBUG&& AppUtils.isDebug(ContactConfig.getContext()))
            android.util.Log.e(TAG, buildMessage(msg), thr);
    }

    /**
     * Building Message
     *
     * @param msg The message you would like logged.
     * @return Message String
     */
    public static String buildMessage(String msg) {
        StackTraceElement caller = new Throwable().fillInStackTrace().getStackTrace()[2];

        return new StringBuilder()
                .append(caller.getClassName())
                .append(".")
                .append(caller.getMethodName())
                .append("(): ")
                .append(msg).toString();
    }

    /**
	 * 写log到文件
	 * 
	 * @param context
	 * @param folderDir
	 *            log目录
	 * @param fileName
	 *            log文件名称
	 * @param logMessage
	 *            log内容
	 * @param logPerDay
	 *            是否每日一个log文件
	 */
    public static void writeLogToFile(Context context, String folderDir,
    	    String fileName, String logMessage, boolean logPerDay){
    	WriteLogIntentService.writeFileLog(context, folderDir, fileName, logMessage, logPerDay);
    }
   
    
}
